package com.sml.anno;

import com.sml.validation.StateValidation;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Documented //元注解，标识这个注解是一个文档注释，用于生成文档
@Target({FIELD}) //元注解，标识这个注解可以应用于哪些元素,类，方法，属性，参数，构造器，局部变量，包
@Retention(RUNTIME) //元注解，标识这个注解的生命周期，运行时，
@Constraint(validatedBy = {StateValidation.class})
public @interface State {
    /**
     * 校验失败时的提示信息
     *
     * @return 提示信息
     */
    String message() default "State 参数的值只能是已发布或者草稿";

    /**
     * 分组校验
     *
     * @return 默认分组
     */
    Class<?>[] groups() default {};

    /**
     * 负载 可以获取大注解的附加信息
     *
     * @return Payload
     */
    Class<? extends Payload>[] payload() default {};
}
